package com.test.day02;

/**
 * @program: 实现卖票案例
 * @author: luhd
 * @create: 2021-07-30
 */
public class RunnableImpl implements Runnable {
    private int ticket = 100;
    //@Override
    //public void run() {
    //    while (true){
    //        if(ticket>0){
    //            //提高安全出现的概率，让程序睡眠
    //            try {
    //                Thread.sleep(10);
    //            } catch (InterruptedException e) {
    //                e.printStackTrace();
    //            }
    //            System.out.println(Thread.currentThread().getName()+"----->正在卖第"+ticket+"张票");
    //            ticket--;
    //        }
    //    }
    //}

    // 解决线程不安全问题

    // 创建 一个锁对象
    Object obj = new Object();

    //@Override
    //public void run() {
    //    while (true) {
    //        synchronized (obj) {
    //            if (ticket > 0) {
    //                //提高安全出现的概率，让程序睡眠
    //                try {
    //                    Thread.sleep(10);
    //                } catch (InterruptedException e) {
    //                    e.printStackTrace();
    //                }
    //                System.out.println(Thread.currentThread().getName() + "----->正在卖第" + ticket + "张票");
    //                ticket--;
    //            }
    //        }
    //    }
    //}


    @Override
    public void run() {
        while(true){
            payTicket();
        }
    }

    public synchronized void payTicket(){
        if(ticket>0){
            //提高安全出现的概率，让程序睡眠
            try {
                Thread.sleep(10);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println(Thread.currentThread().getName()+"----->正在卖第"+ticket+"张票");
            ticket--;
        }
    }
}
